/*
4.Controller层：控制层 控制业务逻辑
具体的业务模块流程的控制，controller层主要调用Service层里面的接口控制具体的业务流程，控制的配置也要在配置文件中进行。

Controller和Service的区别是：Controller负责具体的业务模块流程的控制；Service层负责业务模块的逻辑应用设计
总结：具体的一个项目中有：controller层调用了Service层的方法，Service层调用Dao层的方法，其中调用的参数是使用Entity层进行传递的。
 */
package com.dfrobot.demo.controller;

import com.dfrobot.demo.domain.entity.Address;
import com.dfrobot.demo.domain.entity.User;
import com.dfrobot.demo.dto.UserDTO;
import com.dfrobot.demo.service.AddressService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;
//@RestController该注解为一个组合注解，相当于@Controller和@ResponseBody的组合
@RestController
@Slf4j
//@RequestMapping一个用来处理请求地址映射的注解，可用于类或方法上，用于类上，表示类中的所有相应请求的方法都是该地址作为父路径
@RequestMapping(value = "/address", produces = "application/json;charset=UTF-8")

public class AddressController {
    //注解开发不能单独存在，需要开启扫描，自动装配一般使用@Autowired
    //它可以对类成员变量、方法及构造函数进行标注，完成自动装配的工作，通过@Autowired 的使用来消除set，get方法
    @Autowired
    private AddressService addressService;


    @GetMapping("/list")
    public List<Address> getUserList() {
        List<Address> addressList;
        addressList = this.addressService.getAddressList();
        return addressList;
    }

    @GetMapping("/address_list/{id}")
    public List<Address> getAddressFirstnameList(@PathVariable int id) {
        return this.addressService.addressSelect(id);
    }

    //从Service层 ,获取所有地址的行数
    @GetMapping("/address_count")
    public String  getAddressCountNumber() {
        //String<Address> addressList;
        return this.addressService.getAddressCount();
        //return this.addressService.abc();
    }


    /*@GetMapping("/lists/{table}")
    public List<Address> getTableList() {
        List<Address> addressList;
        addressList = this.addressService.findFieldByTableName(@PathVariable String name);
        return addressList;
    }*/


}
